/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import model.Venda;
import utils.Conexao;
import utils.ExcecaoSCEV;
/**
 *
 * @author Usuario
 */
public class VendaDAO {
     public List<Venda> pegarTodos() throws ExcecaoSCEV {
        List<Venda> Vendas = new ArrayList<Venda>();
        Venda umVenda;

        try {
            Connection db = Conexao.getConnection();
            Statement st = (Statement) db.createStatement();
            ResultSet rs = st.executeQuery(
                "SELECT  cod_produto,subtotal,preco,quantidade FROM venda");
            while (rs.next()) {
                umVenda = new Venda();
                umVenda.setCodigoProduto(rs.getInt(1));
                umVenda.setSubTotal(rs.getDouble(2));
                umVenda.setPreco(rs.getDouble(3));
                umVenda.setQuantidade(rs.getInt(4));
                Vendas.add(umVenda);


            }
            rs.close();


        } catch (SQLException ex) {
            throw new ExcecaoSCEV("Erro ao listar os Produtos. Código " +
                        ex.getSQLState() +
                        "\nDescricao " +
                        ex.getMessage());
        }
        return Vendas;
    }




    public void incluir(Venda Venda) throws ExcecaoSCEV {
        try {
            Connection db = Conexao.getConnection();
            PreparedStatement st =
                db.prepareStatement("insert into venda ("+
                "cod_produto,subtotal,preco,quantidade) values (?,?,?,?)");

            st.setInt(1, Venda.getCodigoProduto());
            st.setDouble(2, Venda.getSubTotal());
            st.setDouble(3, Venda.getPreco());
            st.setInt(4, Venda.getQuantidade());
            st.executeUpdate();
            st.close();
        } catch (SQLException ex) {
            if (ex.getSQLState().equals("23505")) {
                throw new ExcecaoSCEV("Produto duplicado.");
            } else {
                throw new ExcecaoSCEV("Erro na inclusão do Produto. Código " +
                        ex.getSQLState() +
                        "\nDescricao " +
                        ex.getMessage());
            }
        }

    }

    public void alterar(Venda Venda) throws ExcecaoSCEV {
        try {
            Connection db = Conexao.getConnection();
            PreparedStatement st =
                    db.prepareStatement(
"update venda set cod_produto=?, subtotal=?, preco=?, quantidade=? where cod_produto=?");

            st.setInt(1, Venda.getCodigoProduto());
            st.setDouble(2, Venda.getSubTotal());
            st.setDouble(3, Venda.getPreco());
            st.setInt(4, Venda.getQuantidade());
            st.setInt(5, Venda.getCodigoProduto());

            st.executeUpdate();
            st.close();
        } catch (SQLException ex) {
            throw new ExcecaoSCEV("Erro na alteração do Produto.  Código " +
                        ex.getSQLState() +
                        "\nDescricao " +
                        ex.getMessage());
        }
    }

    public void excluir(Venda Venda) throws ExcecaoSCEV {
        try {
            Connection db = Conexao.getConnection();
            PreparedStatement st =
                    db.prepareStatement("delete from Venda where cod_produto = ? ");
            st.setInt(1, Venda.getCodigoProduto());
            st.executeUpdate();
            st.close();
        } catch (SQLException ex) {
           if (ex.getSQLState().equals("23503")) {
                throw new ExcecaoSCEV("Produto possuído por alguma disciplina ou aluno.");
            }   else{
                   throw new ExcecaoSCEV("Erro na exclusão do Produto.  Código " +
                        ex.getSQLState() +
                        "\nDescricao " +
                        ex.getMessage());
            }
        }
    }

    public void carregar(Venda Venda) throws ExcecaoSCEV {

        try {
            Connection db = Conexao.getConnection();
            PreparedStatement st =
                db.prepareStatement("SELECT cod_produto,subtotal,preco,quantidade FROM Produto where cod_produto = ?");
                st.setInt(1, Venda.getCodigoProduto());
                ResultSet rs = st.executeQuery();

                if (rs.next()) {
                    Venda.setCodigoProduto(rs.getInt(1));
                    Venda.setSubTotal(rs.getDouble(2));
                    Venda.setPreco(rs.getDouble(3));
                    Venda.setQuantidade(rs.getInt(4));

                }

            rs.close();
        } catch (SQLException ex) {
            throw new ExcecaoSCEV("Erro ao carregar um Produto. Código " + ex.getSQLState() +
                    "\nDescricao "  + ex.getMessage());
        }

    }

}
